home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / dev / src / ggt.lha / ggT / schlangenpaket.adb < prev    next >
Encoding:
Text File  |  2002-02-13  |  2.0 KB  |  83 lines

  1. -- Schlangenpaket
  2. -- Autor: Norman Walter
  3. -- Datum: 2.2.2002
  4.  
  5. -- Das Paketschema schlangenpaket stellt dem Benutzer ein
  6. -- Warteschlangenkonzept für einen beliebigen Datentyp zur
  7. -- Verfügung. Aus einer Schlange werden die Elemente in der
  8. -- Reihenfolge ihrer Ankunft wieder ausgegeben (FIFO).
  9. -- länge gibt die Anzahl der Elemente in einer Schlange an.
  10. -- Der Versuch, einer leeren Schlang ein Element zu entnehmen,
  11. -- löst die Ausnahme schlange_ist_leer aus. Intern wird eine
  12. -- Schlange durch den geschützten Typ schlangen_infos
  13. -- repräsentiert. Es wird das Paket zeiger_verwaltung benutzt.
  14.  
  15.  
  16. package body schlangenpaket is
  17.  
  18. use listen_verwaltung;
  19.  
  20.    procedure push (schlange : in out schlangen_infos; elem : in element) is
  21.  
  22.    begin
  23.  
  24.       if schlange.last = null
  25.          then holen (schlange.last);
  26.               schlange.last.all:= (elem,null);
  27.               schlange.first:= schlange.last;
  28.          else holen (schlange.last.nachfolger);
  29.               schlange.last.nachfolger.all:= (elem,null);
  30.               schlange.last:= schlange.last.nachfolger;
  31.          end if;
  32.  
  33.          schlange.länge:= schlange.länge + 1;
  34.  
  35.    end push;
  36.  
  37.    procedure pop (schlange : in out schlangen_infos; elem : out element) is
  38.  
  39.    begin
  40.  
  41.       if schlange.länge = 0 then raise schlange_ist_leer;
  42.       end if;
  43.  
  44.       elem:= schlange.first.daten;
  45.  
  46.       aushängen:
  47.  
  48.          declare
  49.  
  50.             hilfszeiger : zeiger_typ;
  51.  
  52.             begin
  53.  
  54.                hilfszeiger:= schlange.first;
  55.                schlange.first:= schlange.first.nachfolger;
  56.  
  57.                ablegen (hilfszeiger);
  58.  
  59.       end aushängen;
  60.  
  61.       schlange.länge:= schlange.länge-1;
  62.  
  63.       if schlange_leer(schlange) then schlange.last:= null;
  64.       end if;
  65.  
  66.    end pop;
  67.  
  68.    function länge (schlange : in schlangen_infos) return integer is
  69.  
  70.    begin
  71.       return schlange.länge;
  72.  
  73.    end länge;
  74.  
  75.    function schlange_leer (schlange : in schlangen_infos) return boolean is
  76.    -- Liefert true zurück, falls schlange leer ist, sonst false
  77.    begin
  78.       return schlange.länge = 0;
  79.  
  80.    end schlange_leer;
  81.  
  82. end schlangenpaket;
  83.